#include "api_io.h"
#include "at32f415_delay_driver.h"

void api_io_init(struct HANDLE_API_IO *thiss);

//beep
AT32F415GPIO beep={
    .port = GPIOC,
    .crm_clk_type = CRM_GPIOC_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_PUSH_PULL,
        .gpio_mode = GPIO_MODE_OUTPUT,
        .gpio_pins = GPIO_PINS_14,
        .gpio_pull = GPIO_PULL_UP,
    }
};

AT32F415GPIO sysled={
    .port = GPIOC,
    .crm_clk_type = CRM_GPIOC_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_PUSH_PULL,
        .gpio_mode = GPIO_MODE_OUTPUT,
        .gpio_pins = GPIO_PINS_13,
        .gpio_pull = GPIO_PULL_UP,
    }
};

AT32F415GPIO output_io1={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_PUSH_PULL,
        .gpio_mode = GPIO_MODE_OUTPUT,
        .gpio_pins = GPIO_PINS_1,
        .gpio_pull = GPIO_PULL_UP,
    }
};

AT32F415GPIO output_io2={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_PUSH_PULL,
        .gpio_mode = GPIO_MODE_OUTPUT,
        .gpio_pins = GPIO_PINS_2,
        .gpio_pull = GPIO_PULL_UP,
    }
};

AT32F415GPIO input_io1={
    .port = GPIOA,
    .crm_clk_type = CRM_GPIOA_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_PUSH_PULL,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_1,
        .gpio_pull = GPIO_PULL_UP,
    }
};

AT32F415GPIO input_io2={
    .port = GPIOA,
    .crm_clk_type = CRM_GPIOA_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_2,
        .gpio_pull = GPIO_PULL_UP,
    }
};


HANDLE_API_IO h_api_io={
    .init = api_io_init,
    .beep = &beep,
    .sysled = &sysled,
    .output_io1 = &output_io1,
    .output_io2 = &output_io2,
	.input_io1 = &input_io1,
    .input_io2 = &input_io2,

};

void api_io_init(struct HANDLE_API_IO *thiss)
{
    gpio_init_pin(thiss->beep);
    gpio_init_pin(thiss->sysled);
    gpio_init_pin(thiss->output_io1);
    gpio_init_pin(thiss->output_io2);
    gpio_init_pin(thiss->input_io1);
    gpio_init_pin(thiss->input_io2);
    thiss->output_io1->clr(thiss->output_io1);
    thiss->output_io2->clr(thiss->output_io2);

}
